#include <stdio.h>
#include <cuda_runtime.h>
#include <device_launch_parameters.h>
// #include <sm_20_intrinsics.h>   __isLocal

using namespace std;

static __global__ void test_kernel() {
    int array[3];
    float value = 5;
    __shared__ int shared_value;
    printf("array is local = %s\n", __isLocal(array) ? "true" : "false");
    printf("value is local = %s\n", __isLocal(&value) ? "true" : "false");
    printf("array is shared_value = %s\n", __isLocal(&shared_value) ? "true" : "false");
}

int main() {
    test_kernel<<<1, 1>>>();
    cudaDeviceSynchronize();
}

// array is local = true
// value is local = true
// array is shared_value = false

// localMemory用来放置核函数中申请的局部变量，但是localMemory属于gm的一部分，访问很慢，
// 所以局部变量优先分配到shareMemory上，当变量较大时，比如大数组，才考虑使用localMemory。